import java.util.*;

/*
    49. 字母异位词分组
    重点：将字符串对应的字符数组排序后，即可实现判断两个字符串是否是相同字母组成
    用map维护一个排序后的字符串和一个列表即可
 */

public class GroupAnagrams {

    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> ans = new ArrayList<>();
        HashMap<String, List<String>> maps = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            char[] chars = strs[i].toCharArray();
            Arrays.sort(chars);
            String s = new String(chars);
            if (maps.containsKey(s)) {
                List<String> strings = maps.get(s);
                strings.add(strs[i]);
                maps.put(s, strings);
            } else {
                ArrayList<String> list = new ArrayList<>();
                list.add(strs[i]);
                maps.put(s, list);
            }
        }
        for (Map.Entry<String, List<String>> entry : maps.entrySet()) {
            ans.add(entry.getValue());
        }
        return ans;
    }
}
